#ifndef REGISTROVARIABLE_H_INCLUDED
#define REGISTROVARIABLE_H_INCLUDED



class IRegistroVariable{
public:
	virtual unsigned int size() const =0;
	virtual bool operator==(const IRegistroVariable&) const=0;
	virtual bool operator!=(const IRegistroVariable&) const=0;
	virtual bool operator<(const IRegistroVariable&) const=0;
	virtual bool operator>(const IRegistroVariable&) const=0;
	virtual bool operator<=(const IRegistroVariable&) const=0;
	virtual bool operator>=(const IRegistroVariable&) const=0;
};

template<class T> class Registro{
private:
    T* dato;

public:
    Registro(T &dato){
        this->dato=&dato;
    }

    Registro(){

    }

    T getDato(){
        return *(this->dato);
    }

    void setDato(T &dato){
        this->dato=&dato;
    }

    unsigned char getSize() const{
    	return sizeof(T);
    }


};


class RegistroVariable:public IRegistroVariable{
public:

	RegistroVariable(){

	}
	unsigned int size() const{
	return 0;
	}
	virtual bool operator==(const IRegistroVariable& Comp) const{
		return false;
	}
	virtual bool operator!=(const IRegistroVariable& Comp) const{
		return true;
	}
	virtual bool operator<(const IRegistroVariable& Comp) const{
		return true;
	}

	virtual bool operator>(const IRegistroVariable& Comp) const{
			return false;
		}
	virtual bool operator<=(const IRegistroVariable& Comp) const{
			return true;
		}
	virtual bool operator>=(const IRegistroVariable& Comp) const{
			return false;
		}

};


#endif // REGISTROVARIABLE_H_INCLUDED
